java - 多线程,锁

 

1.继承Thread
  * 定义类继承Thread
  * 重写run方法
  * 把新线程要做的事写在run方法中
  * 创建线程对象
  * 开启新线程, 内部会自动执行run方法


  public class Demo2_Thread {
    public static void main(String[] args) {
      MyThread mt = new MyThread();    //4,创建自定义类的对象
      mt.start();    //5,开启线程

      for(int i = 0; i < 3000; i++) {
      System.out.println("bb");
      }
    }
  }
  class MyThread extends Thread {    //1,定义类继承Thread
    public void run() {    //2,重写run方法
    for(int i = 0; i < 3000; i++) {    //3,将要执行的代码,写在run方法中
    System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
    }
  }
}

 

* 2.实现Runnable
  * 定义类实现Runnable接口
  * 实现run方法
  * 把新线程要做的事写在run方法中
  * 创建自定义的Runnable的子类对象
  * 创建Thread对象, 传入Runnable
  * 调用start()开启新线程, 内部会自动调用Runnable的run()方法

  public class Demo3_Runnable {
    public static void main(String[] args) {
      MyRunnable mr = new MyRunnable();    //4,创建自定义类对象
      //Runnable target = new MyRunnable();
      Thread t = new Thread(mr);    //5,将其当作参数传递给Thread的构造函数
      t.start();    //6,开启线程

      for(int i = 0; i < 3000; i++) {
        System.out.println("bb");
      }
    }
  }

  class MyRunnable implements Runnable {    //1,自定义类实现Runnable接口
    @Override
    public void run() {    //2,重写run方法
      for(int i = 0; i < 3000; i++) {    //3,将要执行的代码,写在run方法中
        System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaa");
      }
    }
  }

 

 

匿名内部类:

 

 

 

 

Java中守护线程的总结

  在Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程) 

  用个比较通俗的比如,任何一个守护线程都是整个JVM中所有非守护线程的保姆:

  只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一同结束工作。

  Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是 GC (垃圾回收器),它就是一个很称职的守护者。

  User和Daemon两者几乎没有区别,唯一的不同之处就在于虚拟机的离开:如果 User Thread已经全部退出运行了,只剩下Daemon Thread存在了,虚拟机也就退出了。 因为没有了被守护者,Daemon也就没有工作可做了,也就没有继续运行程序的必要了。

Java中join()方法的理解

  thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。

  比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。

  t.join();      //调用join方法,等待线程t执行完毕

  t.join(1000);  //等待 t 线程,等待时间是1000毫秒。

 

Java线程中yield()的用法

  Thread.yield()方法的作用:暂停当前正在执行的线程,并执行其他线程。(可能没有效果)

  yield()让当前正在运行的线程回到可运行状态,以允许具有相同优先级的其他线程获得运行的机会。因此,使用yield()的目的是让具有相同优先级的线程之间能够适当的轮换执行。但是,实际中无法保证yield()达到让步的目的,因为,让步的线程可能被线程调度程序

再次选中。

  结论:大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。

 

 

 

 

 锁对象要唯一的, this代表实例这个对象,每个线程都会实例对象,导致不是唯一。 类.class 唯一

posted @ 2018-11-26 14:56  红豆·  阅读(158)  评论(0编辑  收藏  举报